import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class StandardExamInTime extends JFrame implements ActionListener,ItemListener{
    File testFile;
    int MAX = 8;
    int maxTime = MAX,score=0;
    javax.swing.Timer time;  //计时器
    JTextArea  showQuesion; //显示试题
    JCheckBox choiceA,choiceB,choiceC,choiceD;
    JLabel showScore,showTime;
    String correctAnswer;   //正确答案
    JButton reStart;
    FileReader inOne;
    BufferedReader inTwo;
    StandardExamInTime(){
        time = new javax.swing.Timer(1000,this);
        showQuesion = new JTextArea(2,16);
        setLayout(new FlowLayout());
        showScore=new JLabel("分数"+score);
        showTime=new JLabel(" ");
        add(showTime);
        add(new JLabel("问题:")) ;
        add(showQuesion);
        choiceA =new JCheckBox("A");
        choiceB =new JCheckBox("B");
        choiceC =new JCheckBox("C");
        choiceD =new JCheckBox("D");
        choiceA.addItemListener(this);
        choiceB.addItemListener(this);
        choiceC.addItemListener(this);
        choiceD.addItemListener(this);
        add(choiceA);
        add(choiceB);
        add(choiceC);
        add(choiceD);
        add(showScore);
        reStart=new JButton("再做一遍");
        reStart.setEnabled(false);
        add(reStart);
        reStart.addActionListener(this);
        setBounds(100,100,200,200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }
    public void setMAX(int n){
        MAX = n;
    }
    public void setTestFile(File f) {
        testFile = f;
        score=0;
        try{
            inOne = new FileReader(testFile);
            inTwo = new BufferedReader(inOne);
            readOneQuesion();
            reStart.setEnabled(false);
        }
        catch(IOException exp){
            showQuesion.setText("没有选题");
        }
    }
    public void readOneQuesion() {
        showQuesion.setText(null);
        try {
            String s = null;
            while((s = inTwo.readLine())!=null) {
                if(!s.startsWith("-"))
                    showQuesion.append("\n"+s);
                else {
                    s = s.replaceAll("-","");
                    correctAnswer = s;
                    break;
                }
            }
            time.start();   //启动计时
            if(s==null) {
                inTwo.close();
                reStart.setEnabled(true);
                showQuesion.setText("题目完毕");
                time.stop();
            }
        }
        catch(IOException exp){}
    }
    public void itemStateChanged(ItemEvent e) {
        JCheckBox box=(JCheckBox)e.getSource();
        String str=box.getText();
        boolean booOne=box.isSelected();
        boolean booTwo=str.compareToIgnoreCase(correctAnswer)==0;
        if(booOne&&booTwo){
            score++;
            showScore.setText("分数:"+score);
            time.stop();       //停止计时
            maxTime = MAX;
            readOneQuesion(); //读入下一道题目
        }
        box.setSelected(false);
    }
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==time){
            showTime.setText("剩:"+maxTime+"秒ln");
            maxTime--;
            if(maxTime <= 0){
                maxTime = MAX;
                readOneQuesion(); //读入下一道题目
            }
        }
        else if(e.getSource()==reStart) {
            setTestFile(testFile);
        }
    }
}
